package com.aygxy.carproject.service;

import com.aygxy.carproject.pojo.category.dto.CategoryAddNewDTO;
import com.aygxy.carproject.pojo.category.dto.CategoryUpdateInfoDTO;
import com.aygxy.carproject.pojo.category.vo.CategoryStandardVO;
import com.aygxy.carproject.pojo.category.vo.CategoryTreeVO;
import com.aygxy.carproject.web.JsonPage;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>类别业务接口</p>
 */
public interface CategoryService {

    /**
     * 增加类别
     *
     * @param categoryAddNewDTO 新增的类别对象
     */
    @Transactional
    Long addNew(CategoryAddNewDTO categoryAddNewDTO);

    /**
     * 根据id删除类别
     *
     * @param id 被删除的类别的id
     */
    @Transactional
    void deleteById(Long id);

    /**
     * 启用类别
     *
     * @param id 类别id
     */
    void setEnableById(Long id);

    /**
     * 禁用类别
     *
     * @param id 类别id
     */
    void setDisableById(Long id);



    /**
     * 全量查询商品分类列表
     * @return
     */
    List<CategoryStandardVO> getCategoryList();

    /**
     * 更新类别的基本信息
     *
     * @param id                        类别id
     * @param categoryUpdateInfoDTO 封装了类别基本信息的对象
     */
    void updateInfoById(Long id, CategoryUpdateInfoDTO categoryUpdateInfoDTO);

    /**
     * 根据类别id获取类别详情
     *
     * @param id 类别id
     * @return 匹配的类别详情，如果没有匹配的数据，将抛出异常
     */
    CategoryStandardVO getById(Long id);

    /**
     * 查询类别列表
     *
     * @param parentId 父级类别id
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 类别的列表，如果无记录，则返回长度为0的列表
     */
    JsonPage<CategoryStandardVO> listByParent(Long parentId, Integer pageNum, Integer pageSize);


}
